/*******************************************************************************
 * Copyright (c) 2004, 2006 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.tests.themes;

import java.util.List;
import java.util.Set;

import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.internal.themes.ThemeElementHelper;
import org.eclipse.ui.internal.util.PrefUtil;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemeManager;

/**
 * Tests the theme API.
 *
 * @since 3.0
 */
public class ThemeAPITest extends ThemeTest {

    /**
	 *
	 */
	private static final String EXTENDED_THEME3 = "extendedTheme3";
	/**
	 *
	 */
	private static final String EXTENDED_THEME2 = "extendedTheme2";
	/**
	 *
	 */
	private static final String EXTENDED_THEME1 = "extendedTheme1";
	/**
	 *
	 */
	private static final String PLATFORMFONT = "platformfont";
	/**
	 *
	 */
	private static final String PLATFORMCOLOR = "platformcolor";
	/**
	 *
	 */
	private static final String NOOVERRIDEFONT = "nooverridefont";
	/**
	 *
	 */
	private static final String NOVALFONT = "novalfont";
	/**
	 *
	 */
	private static final String DEFAULTEDFONT3 = "defaultedfont3";
	/**
	 *
	 */
	private static final String DEFAULTEDFONT2 = "defaultedfont2";
	/**
	 *
	 */
	private static final String DEFAULTEDFONT = "defaultedfont";
	/**
	 *
	 */
	private static final String VALFONT = "valfont";
	/**
	 *
	 */
	private static final String DEFAULTEDCOLOR3 = "defaultedcolor3";
	/**
	 *
	 */
	private static final String DEFAULTEDCOLOR2 = "adefaultedcolor2";
	/**
	 *
	 */
	private static final String VALUE2 = "value2";
	/**
	 *
	 */
	private static final String OVERRIDE1 = "override1";
	/**
	 *
	 */
	private static final String NOOVERRIDECOLOR = "nooverridecolor";
	/**
	 *
	 */
	private static final String DEFAULTEDCOLOR = "defaultedcolor";
	/**
	 *
	 */
	private static final String SWTCOLOR = "swtcolor";
	/**
	 *
	 */
	private static final String FACTORYCOLOR = "factorycolor";
	/**
	 *
	 */
	private static final String RGBCOLOR = "rgbcolor";
	/**
	 *
	 */
	private static final String BOOL1 = "bool1";
	/**
	 *
	 */
	private static final String BOGUSKEY = "BOGUSKEY";
	/**
	 *
	 */
	private static final String INT1 = "int1";
	/**
	 *
	 */
	private static final String DATA2 = "data2";
	/**
	 *
	 */
	private static final String DATA1 = "data1";
	/**
	 *
	 */
	private static final String BAD_COLOR1 = "badColor1";
	/**
	 *
	 */
	private static final String BAD_COLOR2 = "badColor2";
	/**
	 *
	 */
	private static final String BAD_COLOR3 = "badColor3";

	/**
     * @param testName
     */
    public ThemeAPITest(String testName) {
        super(testName);
    }

    private void checkEvents(ThemePropertyListener listener, Object source,
            Object oldObject, Object newObject) {
        boolean array = oldObject instanceof Object[];
        List events = listener.getEvents();
        assertEquals(2, events.size());
        PropertyChangeEvent event = (PropertyChangeEvent) events.get(0);

        assertEquals(source, event.getSource());
        if (array) {
            assertArrayEquals((Object[]) oldObject, (Object[]) event
                    .getOldValue());
            assertArrayEquals((Object[]) newObject, (Object[]) event
                    .getNewValue());
        } else {
            assertEquals(oldObject, event.getOldValue());
            assertEquals(newObject, event.getNewValue());
        }

        event = (PropertyChangeEvent) events.get(1);
        assertEquals(source, event.getSource());
        if (array) {
            assertArrayEquals((Object[]) oldObject, (Object[]) event
                    .getNewValue());
            assertArrayEquals((Object[]) newObject, (Object[]) event
                    .getOldValue());
        } else {
            assertEquals(oldObject, event.getNewValue());
            assertEquals(newObject, event.getOldValue());
        }
    }

    public void testBooleanDataConversion() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(false, defaultTheme.getBoolean(DATA1));
        assertEquals(false, defaultTheme.getBoolean(DATA2));
        assertEquals(false, defaultTheme.getBoolean(INT1));
        assertEquals(false, defaultTheme.getBoolean(BOGUSKEY));
        assertEquals(true, defaultTheme.getBoolean(BOOL1));
    }

    public void testColorCascadeEvents() {
        ITheme currentTheme = fManager.getCurrentTheme();
        assertNotNull(currentTheme);

        ThemePropertyListener managerListener = new ThemePropertyListener();
        ThemePropertyListener themeListener = new ThemePropertyListener();
        fManager.addPropertyChangeListener(managerListener);
        currentTheme.addPropertyChangeListener(themeListener);

        ColorRegistry colorRegistry = currentTheme.getColorRegistry();
        RGB oldColor = colorRegistry.getRGB(RGBCOLOR);
        RGB newColor = new RGB(121, 9, 121);
        colorRegistry.put(RGBCOLOR, newColor);
        colorRegistry.put(RGBCOLOR, oldColor);

        checkEvents(managerListener, colorRegistry, oldColor, newColor);
        checkEvents(themeListener, colorRegistry, oldColor, newColor);

        fManager.removePropertyChangeListener(managerListener);
        currentTheme.removePropertyChangeListener(themeListener);
    }
// RAP [if] Commented as it fails with RAP X
// RAP [hs] fails because a color called FACTORYCOLOR is not registered. Maybe
// this color comes from an ide bundle
//    public void testColorFactory() {
//        ITheme defaultTheme = getDefaultTheme();
//        assertEquals(TestColorFactory.RGB, defaultTheme.getColorRegistry()
//                .getRGB(FACTORYCOLOR));
//    }

    public void testColorPreferenceListener_def_swtcolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideColorPreference(defaultTheme, store, SWTCOLOR);
    }

    public void testColorPreferenceListener_def_rgbcolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideColorPreference(defaultTheme, store, RGBCOLOR);
    }

    public void testColorPreferenceListener_def_defaultedcolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideColorPreference(defaultTheme, store, DEFAULTEDCOLOR);
    }

    public void testColorPreferenceListener_def_nooverridecolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideColorPreference(defaultTheme, store, NOOVERRIDECOLOR);
    }

    public void testColorPreferenceListener_th1_swtcolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideColorPreference(theme1, store, SWTCOLOR);
    }

    public void testColorPreferenceListener_th1_rgbcolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideColorPreference(theme1, store, RGBCOLOR);
    }

    public void testColorPreferenceListener_th1_defaultedcolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideColorPreference(theme1, store, DEFAULTEDCOLOR);
    }

    public void testColorPreferenceListener_th1_nooverridecolor() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideColorPreference(theme1, store, NOOVERRIDECOLOR);
    }

    public void testDataKeySet_data1() {
        ITheme defaultTheme = getDefaultTheme();
        Set themeKeys = defaultTheme.keySet();

        assertTrue(themeKeys.contains(DATA1));
    }

    public void testDataKeySet_data2() {
        ITheme defaultTheme = getDefaultTheme();
        Set themeKeys = defaultTheme.keySet();

        assertTrue(themeKeys.contains(DATA2));
    }

    public void testDataKeySet_int1() {
        ITheme defaultTheme = getDefaultTheme();
        Set themeKeys = defaultTheme.keySet();

        assertTrue(themeKeys.contains(INT1));
    }

    public void testDataKeySet_bool1() {
        ITheme defaultTheme = getDefaultTheme();
        Set themeKeys = defaultTheme.keySet();

        assertTrue(themeKeys.contains(BOOL1));
    }

    public void testDataKeySet_BOGUSKEY() {
        ITheme defaultTheme = getDefaultTheme();
        Set themeKeys = defaultTheme.keySet();

        assertFalse(themeKeys.contains(BOGUSKEY));
    }

    public void testDataOverride_data1() {
        ITheme theme1 = getTheme1();

        assertEquals(OVERRIDE1, theme1.getString(DATA1));
    }

    public void testDataOverride_data2() {
        ITheme theme1 = getTheme1();

        assertEquals(VALUE2, theme1.getString(DATA2));
    }

    public void testDefaultedColor_rgbcolor() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(defaultTheme.getColorRegistry().getRGB(RGBCOLOR),
                defaultTheme.getColorRegistry().getRGB(DEFAULTEDCOLOR));
    }

    public void testDefaultedColor_defaultedcolor() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(defaultTheme.getColorRegistry().getRGB(DEFAULTEDCOLOR),
                defaultTheme.getColorRegistry().getRGB(DEFAULTEDCOLOR2));
    }

    public void testDefaultedColor_defaultedcolor2() {
        ITheme defaultTheme = getDefaultTheme();

        assertEquals(defaultTheme.getColorRegistry().getRGB(DEFAULTEDCOLOR2),
                defaultTheme.getColorRegistry().getRGB(DEFAULTEDCOLOR3));
    }

    public void testDefaultedFont_valfont() {
        ITheme defaultTheme = getDefaultTheme();
        assertArrayEquals(
                defaultTheme.getFontRegistry().getFontData(VALFONT),
                defaultTheme.getFontRegistry().getFontData(DEFAULTEDFONT));
    }

    public void testDefaultedFont_defaultedfont() {
        ITheme defaultTheme = getDefaultTheme();
        assertArrayEquals(defaultTheme.getFontRegistry().getFontData(
                DEFAULTEDFONT), defaultTheme.getFontRegistry().getFontData(
                DEFAULTEDFONT2));
    }

    public void testDefaultedFont_defaultedfont2() {
        ITheme defaultTheme = getDefaultTheme();
        assertArrayEquals(defaultTheme.getFontRegistry().getFontData(
                DEFAULTEDFONT2), defaultTheme.getFontRegistry().getFontData(
                DEFAULTEDFONT3));
    }

    public void testDefaultedFontOverride_valfont() {
        ITheme theme1 = getTheme1();
        assertArrayEquals(theme1.getFontRegistry().getFontData(VALFONT),
                theme1.getFontRegistry().getFontData(DEFAULTEDFONT));
    }

    public void testDefaultedFontOverride_defaultedfont2() {
        ITheme theme1 = getTheme1();

        assertArrayEquals(new FontData[] { new FontData("Courier", 16,
                SWT.NORMAL) }, theme1.getFontRegistry().getFontData(
                DEFAULTEDFONT2));
    }

    public void testDefaultedFontOverride_defaultedfont3() {
        ITheme theme1 = getTheme1();

        assertArrayEquals(theme1.getFontRegistry()
                .getFontData(DEFAULTEDFONT2), theme1.getFontRegistry()
                .getFontData(DEFAULTEDFONT3));
    }

    public void testDefaultedOverrideColor_rgbcolor() {
        ITheme theme1 = getTheme1();
        assertEquals(theme1.getColorRegistry().getRGB(RGBCOLOR), theme1
                .getColorRegistry().getRGB(DEFAULTEDCOLOR));
    }

    public void testDefaultedOverrideColor_defaultedcolor2() {
        ITheme theme1 = getTheme1();
        assertEquals(new RGB(9, 9, 9), theme1.getColorRegistry().getRGB(
                DEFAULTEDCOLOR2));

    }

    public void testDefaultedOverrideColor_defaultedcolor3() {
        ITheme theme1 = getTheme1();
        assertEquals(theme1.getColorRegistry().getRGB(DEFAULTEDCOLOR2),
                theme1.getColorRegistry().getRGB(DEFAULTEDCOLOR3));
    }

    public void testFontCascadeEvents() {
        ITheme currentTheme = fManager.getCurrentTheme();
        assertNotNull(currentTheme);

        ThemePropertyListener managerListener = new ThemePropertyListener();
        ThemePropertyListener themeListener = new ThemePropertyListener();
        fManager.addPropertyChangeListener(managerListener);
        currentTheme.addPropertyChangeListener(themeListener);

        FontRegistry fontRegistry = currentTheme.getFontRegistry();
        FontData[] oldFont = fontRegistry.getFontData(VALFONT);
        FontData[] newFont = new FontData[] { new FontData("Courier", 30,
                SWT.ITALIC) };
        fontRegistry.put(VALFONT, newFont);
        fontRegistry.put(VALFONT, oldFont);

        checkEvents(managerListener, fontRegistry, oldFont, newFont);
        checkEvents(themeListener, fontRegistry, oldFont, newFont);

        fManager.removePropertyChangeListener(managerListener);
        currentTheme.removePropertyChangeListener(themeListener);
    }

    public void testFontPreferenceListener_def_novalfont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();
        testOverrideFontPreference(defaultTheme, store, NOVALFONT);
    }

    public void testFontPreferenceListener_def_valfont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideFontPreference(defaultTheme, store, VALFONT);
    }

    public void testFontPreferenceListener_def_defaultedfont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideFontPreference(defaultTheme, store, DEFAULTEDFONT);
    }

    public void testFontPreferenceListener_def_nooverridefont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme defaultTheme = getDefaultTheme();

        testOverrideFontPreference(defaultTheme, store, NOOVERRIDEFONT);
    }

    public void testFontPreferenceListener_th1_valfont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideFontPreference(theme1, store, VALFONT);
    }

    public void testFontPreferenceListener_th1_novalfont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideFontPreference(theme1, store, NOVALFONT);
    }

    public void testFontPreferenceListener_th1_defaultedfont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideFontPreference(theme1, store, DEFAULTEDFONT);
    }

    public void testFontPreferenceListener_th1_nooverridefont() {
        IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
        ITheme theme1 = getTheme1();

        testOverrideFontPreference(theme1, store, NOOVERRIDEFONT);
    }

    public void testGetBadTheme() {
        ITheme badTheme = fManager.getTheme(BOGUSID);
        assertNull(badTheme);
    }

    public void testIntDataConversion() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(0, defaultTheme.getInt(DATA1));
        assertEquals(0, defaultTheme.getInt(DATA2));
        assertEquals(0, defaultTheme.getInt(BOOL1));
        assertEquals(0, defaultTheme.getInt(BOGUSKEY));
        assertEquals(3133, defaultTheme.getInt(INT1));
    }

    public void testNoValFont() {
        ITheme defaultTheme = getDefaultTheme();
        assertArrayEquals(defaultTheme.getFontRegistry().defaultFont()
                .getFontData(), defaultTheme.getFontRegistry().getFontData(
                NOVALFONT));
    }

    public void testNoValFontOverride() {
        ITheme theme1 = getTheme1();
        assertArrayEquals(new FontData[] { new FontData("Courier", 10,
                SWT.ITALIC) }, theme1.getFontRegistry()
                .getFontData(NOVALFONT));

    }

    private void testOverrideColorPreference(ITheme theme,
            IPreferenceStore store, String color) {
        RGB oldRGB = theme.getColorRegistry().getRGB(color);
        RGB newRGB = new RGB(75, 21, 68);

        store.setValue(ThemeElementHelper.createPreferenceKey(theme, color),
                StringConverter.asString(newRGB));
        assertEquals(newRGB, theme.getColorRegistry().getRGB(color));
        store
                .setToDefault(ThemeElementHelper.createPreferenceKey(theme,
                        color));
        assertEquals(oldRGB, theme.getColorRegistry().getRGB(color));
    }

    private void testOverrideFontPreference(ITheme theme,
            IPreferenceStore store, String font) {
        FontData[] oldFont = theme.getFontRegistry().getFontData(font);
        FontData[] newFont = new FontData[] { new FontData("Courier", 30,
                SWT.ITALIC) };
        store.setValue(ThemeElementHelper.createPreferenceKey(theme, font),
                PreferenceConverter.getStoredRepresentation(newFont));
        assertArrayEquals(newFont, theme.getFontRegistry().getFontData(font));
        store.setToDefault(ThemeElementHelper.createPreferenceKey(theme, font));
        assertArrayEquals(oldFont, theme.getFontRegistry().getFontData(font));
    }

    public void testPlatformColor() {
        ITheme defaultTheme = getDefaultTheme();
        RGB rgb = null;
        // test for two specific platforms and one general
        if (Platform.getWS().equals("win32")
                && Platform.getOS().equals("win32"))
            rgb = new RGB(50, 50, 50);
        else if (Platform.getWS().equals("gtk")
                && Platform.getOS().equals("linux"))
            rgb = new RGB(25, 25, 25);
        else if (Platform.getOS().equals("linux"))
            rgb = new RGB(75, 75, 75);
        else
            rgb = new RGB(0, 0, 0);

        assertEquals(rgb, defaultTheme.getColorRegistry().getRGB(
                PLATFORMCOLOR));
    }

    public void testPlatformFont() {
        ITheme defaultTheme = getDefaultTheme();
        FontData[] data = null;
        if (Platform.getWS().equals("win32")
                && Platform.getOS().equals("win32"))
            data = new FontData[] { new FontData("Courier New", 12, SWT.NORMAL) };
        else
            data = new FontData[] { new FontData("Sans", 15, SWT.BOLD) };

        assertArrayEquals(data, defaultTheme.getFontRegistry().getFontData(
                PLATFORMFONT));
    }

    public void testRGBColor() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(new RGB(1, 1, 2), defaultTheme.getColorRegistry().getRGB(
                RGBCOLOR));
    }

    public void testRGBColorOverride() {
        ITheme theme1 = getTheme1();
        assertEquals(new RGB(2, 1, 1), theme1.getColorRegistry().getRGB(
                RGBCOLOR));
    }

    public void testSetTheme() {
        ThemePropertyListener listener = new ThemePropertyListener();
        fManager.addPropertyChangeListener(listener);
        ITheme currentTheme = fManager.getCurrentTheme();
        fManager.setCurrentTheme(BOGUSID);
        assertEquals(currentTheme, fManager.getCurrentTheme());
        fManager.setCurrentTheme(THEME1);
        assertNotSame(currentTheme, fManager.getCurrentTheme());
        ITheme newCurrentTheme = fManager.getCurrentTheme();
        ITheme theme1 = getTheme1();
        assertEquals(theme1, newCurrentTheme);
        List events = listener.getEvents();
        assertEquals(1, events.size());
        PropertyChangeEvent event = ((PropertyChangeEvent) events.get(0));
        assertEquals(IThemeManager.CHANGE_CURRENT_THEME, event.getProperty());
        assertEquals(currentTheme, event.getOldValue());
        assertEquals(newCurrentTheme, event.getNewValue());
        fManager.removePropertyChangeListener(listener);
    }

    public void testStringData() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals("value1", defaultTheme.getString(DATA1));
        assertEquals(VALUE2, defaultTheme.getString(DATA2));
        assertEquals("3133", defaultTheme.getString(INT1));
        assertEquals("true", defaultTheme.getString(BOOL1));
        assertEquals(null, defaultTheme.getString(BOGUSKEY));
    }

    public void testSWTColor() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(Display.getDefault().getSystemColor(SWT.COLOR_DARK_BLUE)
                .getRGB(), defaultTheme.getColorRegistry().getRGB(SWTCOLOR));
    }

    public void testSWTColorOverride() {
        ITheme theme1 = getTheme1();
        assertEquals(Display.getDefault().getSystemColor(SWT.COLOR_DARK_GREEN)
                .getRGB(), theme1.getColorRegistry().getRGB(SWTCOLOR));
    }

    public void testThemeDescription_default() {
        ITheme defaultTheme = getDefaultTheme();
        assertEquals(IThemeManager.DEFAULT_THEME, defaultTheme.getId());
        // don't bother testing against the actual value
        assertNotNull(defaultTheme.getLabel());
    }

    public void testThemeDescription_theme1() {
        ITheme theme1 = getTheme1();
        assertEquals(THEME1, theme1.getId());
        assertEquals("test theme 1", theme1.getLabel());
    }

    public void testValFont() {
        ITheme defaultTheme = getDefaultTheme();
        assertArrayEquals(
                new FontData[] { new FontData("Tahoma", 20, SWT.BOLD) },
                defaultTheme.getFontRegistry().getFontData(VALFONT));
    }

    /*
     * The following tests check to ensure that support for multiple extensions
     * contributing to the same theeme work. They also check to ensure that the
     * first value encountered for a given font/colour is the only one used.
     */

    public void testThemeExtensionName() {
        ITheme ext1 = fManager.getTheme(EXTENDED_THEME1);
        ITheme ext2 = fManager.getTheme(EXTENDED_THEME2);
        ITheme ext3 = fManager.getTheme(EXTENDED_THEME3);

        assertEquals("Extended Theme 1", ext1.getLabel());
        assertEquals("Extended Theme 2", ext2.getLabel());
        assertEquals("Extended Theme 3", ext3.getLabel());
    }

    public void testThemeExtensionData() {
        ITheme ext1 = fManager.getTheme(EXTENDED_THEME1);
        assertNotNull(ext1.getString("d1"));
        assertEquals("d1", ext1.getString("d1"));
        assertNotNull(ext1.getString("d2"));
    }

    public void testThemeExtensionColor() {
        ITheme ext1 = fManager.getTheme(EXTENDED_THEME1);
        assertEquals(Display.getDefault().getSystemColor(SWT.COLOR_RED)
                .getRGB(), ext1.getColorRegistry().getRGB(SWTCOLOR));

        assertEquals(Display.getDefault().getSystemColor(SWT.COLOR_RED)
                .getRGB(), ext1.getColorRegistry().getRGB(RGBCOLOR));
    }

    public void testThemeExtensionFont() {
        ITheme ext1 = fManager.getTheme(EXTENDED_THEME1);

        FontData[] fd = new FontData[] { new FontData("Sans", 10,
                SWT.NORMAL) };

        assertArrayEquals(fd, ext1.getFontRegistry()
                .getFontData(VALFONT));

        assertArrayEquals(fd, ext1.getFontRegistry()
                .getFontData(NOVALFONT));
    }

    /**
	 * Tests to ensure that a color with a bogus value doesn't take down the
	 * workbench.
	 */
	public void testBadColor1() {
    	 ITheme defaultTheme = getDefaultTheme();
    	 assertEquals(new RGB(0,0,0), defaultTheme.getColorRegistry().getRGB(BAD_COLOR1)); // doesn't look like an RGB
	}

	/**
	 * Tests to ensure that a color with extra spaces doesn't take down the workbench.
	 */
	public void testBadColor2() {
    	 assertEquals(new RGB(0,0,1), getDefaultTheme().getColorRegistry().getRGB(BAD_COLOR2)); // rgb with extra spaces
	}

	/**
	 * Tests to ensure that a color with extra spaces doesn't take down the workbench.
	 */
	public void testBadColor3() {
    	 assertEquals(new RGB(0,0,0), getDefaultTheme().getColorRegistry().getRGB(BAD_COLOR3)); // rgb with extra characters
    }
}
